const ThingDao = require('../database/ThingDao');

class ThingController {
    constructor(pool) {
        this.thingDao = new ThingDao(pool);
    }

    async getThingsList(req, res) {
        try {
            const { userId } = req.query;
            if (!userId) {
                return res.json({ code: 401, msg: '缺少用户ID' });
            }

            const things = await this.thingDao.getThingsByUserId(userId);
            if(things.length > 0) {
                res.json({ code: 200, msg: '获取成功', data: things });
            } else {
                res.json({ code: 401, msg: '暂无待办事项', data: [] });
            }
        } catch (error) {
            console.error('获取待办事项失败:', error);
            res.json({ code: 500, msg: '服务器错误', data: error });
        }
    }

    async addThing(req, res) {
        try {
            const { userId, content } = req.body;
            console.log(req.body);
            if (!userId) {
                return res.json({ code: 401, msg: '缺少用户ID' });
            }

            if (!content) {
                return res.json({ code: 400, msg: '内容不能为空' });
            }

            const result = await this.thingDao.addThing(content, userId);
            console.log(result);
            res.json({ code: 200, msg: '添加成功', data: null });
        } catch (error) {
            console.error('添加待办事项失败:', error);
            res.json({ code: 500, msg: '服务器错误', data: error });
        }
    }

    async deleteThing(req, res) {
        try {
            // 在设计 API 时，如果有多个标识符需要传递，通常的做法是：
            // 1. 路径参数 ：用于标识资源的唯一标识符，例如待办事项的 ID。
            // 2. 查询参数 ：用于传递其他可选参数或过滤条件，例如用户 ID。
            // 用户ID，过滤条件
            const { userId } = req.query;
            // 待办事项ID，资源的唯一标识符
            const { id } = req.params;
            if (!userId || !id) {
                return res.json({ code: 401, msg: '缺少用户ID或待办事项ID' });
            }
            const result = await this.thingDao.deleteThing(id, userId);
            console.log(result);
            res.json({ code: 200, msg: '删除成功', data: null });
        } catch (error) {
            console.error('删除待办事项失败:', error);
            res.json({ code: 500, msg: '服务器错误', data: error });
        }
    }

    async updateThing(req, res) {
        try {
            const { content } = req.body;
            const { id } = req.params;
            // console.log(req.body);
            // console.log(req.params);
            if ( !id || !content) {
                return res.json({ code: 4001, msg: '缺少待办事项ID或内容' });
            }
            const result = await this.thingDao.updateThing(id, content);
            console.log(result);
            res.json({ code: 200, msg: '更新成功', data: null });
        } catch (error) {
            console.error('更新待办事项失败:', error);
            res.json({ code: 500, msg: '服务器错误', data: error });
        }
    }

    async toggleThing(req, res) {
        try {
            const { id } = req.params;
            if (!id) {
                return res.json({ code: 400, msg: '缺少待办事项ID' });
            }

            const result = await this.thingDao.toggleThing(id);
            console.log(result);
            res.json({ code: 200, msg: '状态更新成功', data: null });
        } catch (error) {
            console.error('切换待办事项状态失败:', error);
            res.json({ code: 500, msg: '服务器错误', data: error });
        }
    }
}

module.exports = ThingController;